#include "game.h"
void menu( )
{
    printf("*****************************\n");
    printf("***********1.Play************\n");
    printf("***********0.Exit************\n");
    printf("*****************************\n");
}
void game()
{
    char arr[row][col];
    fz_table(arr,row,col);//初始化数组内容
    dy_table(arr,row,col);//打印棋盘
    char set='t';//初始化set
    while(1)
    {    

        PlayerMove(arr,row,col);//玩家下棋
        dy_table(arr,row,col);//打印棋盘
        set=isWiner(arr,row,col);//判断是否胜利
        if(set!='c')
        break;
        ComputerMove(arr,row,col);//电脑走
        dy_table(arr,row,col);//打印棋盘
        set=isWiner(arr,row,col);//判断是否胜利
        if(set!='c')
        break;
    }
    if(set=='*')
    printf("玩家胜利！\n");
    else if(set=='o')
    printf("电脑胜利！\n");
    else if(set=='q')
    printf("平局！\n");
    else
    printf("运行出错！\n");

}

void fz_table(char arr[row][col],int x,int y)
{
    for(int i=0;i<x;i++)
    {
        for(int j=0;j<y;j++)
        {
            arr[i][j]=' ';
        }
    }
}


void dy_table(char arr[row][col],int x,int y)
{
    for(int i=0;i<x;i++)
    {
        for(int j=0;j<y;j++)
        {
            printf(" %c ",arr[i][j]);
            if(j<y-1)
            printf("|");
        }
        printf("\n");
        for(int j=0;j<y;j++)
        {
            if(i<x-1)
            printf("---");
            if((j<y-1)&&(i<x-1))
            printf("|");
        }
        printf("\n");
    }
}

void PlayerMove(char arr[row][col],int x,int y)
{
    int m=0,n=0;
    while(1)
    {
        
        printf("玩家走>>请输入下棋坐标：\n");
        scanf("%d %d",&m,&n);
        if( 1<=m && m<=x && 1<=n && n<=y)//判断坐标合法性
        {
            if(arr[m-1][n-1]==' ')//判断坐标是否被占用
            {
            arr[m-1][n-1]='*';
            break;
            }
            else
            printf("输入坐标已下有棋子，请重新输入！\n");
        } 
        else 
            printf("输入坐标错误，请重新输入！\n");
    }

}

void ComputerMove(char arr[row][col],int x, int y)
{
    printf("电脑走>>\n");
    int m=0,n=0;
    while(1)
    {
        m=(rand()%x);
        n=(rand()%y);
        if(arr[m][n]==' ')//判断坐标是否被占用
        {
            arr[m][n]='o';
            break;
        }  
    }
}

//检测棋盘是否满了）
 int isfull(char arr[row][col],int x,int y)
{
    int i=0,j=0;
    for(i=0;i<x;i++)
    {
        for(j=0;j<y;j++)
        {
            if(arr[i][j]==' ')
            return 0;//棋盘没满
        }
    }
    return 1;
}

 char isWiner(char arr[row][col],int x,int y)//判断是否结束
 {
    //判断三行
    int i=0,j=0,tt=0,ping=0;
    for(i=0;i<x;i++)
    {
        for(j=1;j<y;j++)
        {
            if((arr[i][j-1]==arr[i][j])&&(arr[i][j]!=' '))
                tt=tt+1;
                else 
                tt =0;//置零计数器
            if(tt==(YYan-1))
            return arr[i][j];
        }
        tt =0;  
    }
    //判断三列
    i=0,j=0,tt=0;
    for(j=0;j<y;j++)
    {
        for(i=1;i<x;i++)
        {
            if((arr[i-1][j]==arr[i][j])&&(arr[i][j]!=' '))
                tt=tt+1;
                else 
                tt=0;
            if(tt==(YYan-1))
            return arr[i][j];
        }
        tt =0;
    }
    //判断对角线1
    i=0,j=0,tt=0;
    for(i=1;i<x;i++)
    {

            if((arr[i-1][i-1]==arr[i][i])&&(arr[i][i]!=' '))
                tt=tt+1;
                else 
                tt=0;
            if(tt==(YYan-1))
            return arr[i][i];
    }

    //判断对角线2
    i=0,j=0,tt=0;
    for(i=0,j=y-1;i<x&&j>0;i++,j--)
    {
            if((arr[i][j]==arr[i+1][j-1])&&(arr[i][j]!=' '))
                tt=tt+1;
                else 
                tt=0;
            if(tt==(YYan-1))
            return arr[i][j];      
    }
    //判断平局
    i=0,j=0;//置零
    ping=isfull(arr,x,y);
    if(ping==1)
    return 'q';
    else 
    return 'c';
 }